deocomplete-dictionaryを用いたAWSサービス名typo対策
はじめに
AWSのサービス名はtypoの宝庫です。見かける例として以下の通り。
- (正)Amazon Lambda → (誤)Amazon Lamda
- (正)Step Functions → (誤)StepFunction
なお、弊社にはtypo警察が常駐しており、それらtypoを的確にお縄としています。
指摘による品質がよくなるのは良いことですが、できることならtypoしないほうがベターです。特に同じtypoを繰り返してると穴に入りたくなります。今回はneovim + dein + deoplete環境にてAWS特有のtypoを防止する方法の一例をまとめてみました。
deocomplete-dictionary
deocomplete.vimの機能を用いるプラグインを利用します。指定したファイルの中身を補完候補に追加することができます。
deoplete-plugins/deoplete-dictionary: deoplete source for dictionary
Readmeがあっさり目で使い方に戸惑いましたが、慣れてしまえばどうということはありません。
dein.toml
今回の辞書ファイルは~/.config/nvim/aws
に設置しているとします。
[[plugins]] repo = 'deoplete-plugins/deoplete-dictionary' hook_add = ''' setlocal dictionary+=expand('~/.config/nvim/aws') call deoplete#custom#source( \ 'dictionary', 'matchers', ['matcher_head']) '''
先頭一致で問題ないため、matcher_head
指定です。
補完用辞書の中身
単語を一行に一つ羅列します。辞書ファイルに拡張子は不要です。
Amazon EC2 Amazon RDS Amazon Lambda
ただ、100以上のサービスが存在するため、以下の記事にあるような一覧取得がお薦めです。なお、完了まで少し時間がかかります。
% aws ssm get-parameters-by-path --path '/aws/service/global-infrastructure/services' --recursive --output json \ [~/Documents/DevelopersIO] | jq -r '.Parameters[] | select(.Name | endswith("longName")) | .Value' \ | sort > ~/.config/nvim/aws
補完動作
2文字程タイピングすると候補が出てくるはずです。
候補が出てこない場合は
:call deoplete#enable()
のコマンドを実行してから再度タイピングしてみましょう。
辞書を複数追加する場合
dictonaryに追加する形で定義します。
setlocal dictionary+=expand('~/.config/nvim/<source_file>') setlocal dictionary+=expand('~/.config/nvim/<source_file2>')
あとがき
deocomplete-dictionaryについては具体的な記事が見つかりづらいこともあり、試行錯誤しつつも使うことを諦める一歩手前の状態でした。補完のスタイルについてはdeoplete.vimのドキュメントに記載されているため、詳細を知りたい場合は参照してください。